<?php
class UploadControl extends CommonControl{
	function imgAction(){
		/**
		 * ****************************************************************************
		 *
		 * 参数说明:
		 * $max_file_size : 上传文件大小限制, 单位BYTE
		 * $destination_folder : 上传文件路径
		 * $watermark : 是否附加水印(1为加水印,其他为不加水印);
		 *
		 * 使用说明:
		 * 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
		 * 2. 将extension_dir =改为你的php_gd2.dll所在目录;
		 * ****************************************************************************
		 */
		
		//ckeditor上传图片接收的参数
		$funcNum = $_GET['CKEditorFuncNum'] ;
		// Optional: instance name (might be used to load a specific configuration file or anything else).
		$CKEditor = $_GET['CKEditor'] ;
		// Optional: might be used to provide localized messages.
		$langCode = $_GET['langCode'] ;
		
		// Check the $_FILES array and save the file. Assign the correct path to a variable ($url).
		//暂时没有用
		$url = '/path/to/uploaded/file.ext';
		// Usually you will only assign something here if the file could not be uploaded.
		$message = '上传成功';
		
		// 上传文件类型列表
		$uptypes = array(
				'image/jpg',
				'image/jpeg',
				'image/png',
				'image/pjpeg',
				'image/gif',
				'image/bmp',
				'image/x-png' 
		);
		$overwrite = true;	//是否覆盖同名图片
		$max_file_size = 2000000; // 上传文件大小限制, 单位BYTE
		$img_domain_path = DOMAIN.'upload/img/'; //图片线上地址
		$destination_folder = UPLOAD_PATH . 'img/'; // 上传文件路径
		$watermark = 0; // 是否附加水印(1为加水印,其他为不加水印);
		$watertype = 1; // 水印类型(1为文字,2为图片)
		$waterposition = 1; // 水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
		$waterstring = "http://www.everydayread.cn/"; // 水印字符串
		$waterimg = "xplore.gif"; // 水印图片
		$imgpreview = 1; // 是否生成预览图(1为生成,其他为不生成);
		$imgpreviewsize = 1 / 2; // 缩略图比例
		if ($_SERVER['REQUEST_METHOD'] == 'POST'){
			// 是否存在文件
			if (!is_uploaded_file($_FILES["upload"]['tmp_name'])){
				echo "图片不存在!";
				exit();
			}
			
			$file = $_FILES["upload"];
			// 检查文件大小
			if ($max_file_size < $file["size"]){
				
				echo "文件太大!";
				exit();
			}
			// 检查文件类型
			if (!in_array($file["type"], $uptypes)){
				echo "文件类型不符!" . $file["type"];
				exit();
			}
			
			if (!file_exists($destination_folder)){
				mkdir($destination_folder,0777,true);
			}
			
			$filename = $file["tmp_name"];
			$image_size = getimagesize($filename);
			$pinfo = pathinfo($file["name"]);
			$ftype = $pinfo['extension'];
			$destination = $destination_folder . time() . "." . $ftype;
			if (file_exists($destination) && $overwrite != true){
				echo "同名文件已经存在了";
				exit();
			}
			
			if (!move_uploaded_file($filename, $destination)){
				echo "移动文件出错";
				exit();
			}
			
			$pinfo = pathinfo($destination);
			$fname = $pinfo[basename];
			
			if ($watermark == 1){
				$iinfo = getimagesize($destination, $iinfo);
				$nimage = imagecreatetruecolor($image_size[0], $image_size[1]);
				$white = imagecolorallocate($nimage, 255, 255, 255);
				$black = imagecolorallocate($nimage, 0, 0, 0);
				$red = imagecolorallocate($nimage, 255, 0, 0);
				imagefill($nimage, 0, 0, $white);
				switch ($iinfo[2]){
					case 1 :
						$simage = imagecreatefromgif($destination);
						break;
					case 2 :
						$simage = imagecreatefromjpeg($destination);
						break;
					case 3 :
						$simage = imagecreatefrompng($destination);
						break;
					case 6 :
						$simage = imagecreatefromwbmp($destination);
						break;
					default :
						die("不支持的文件类型");
						exit();
				}
				
				imagecopy($nimage, $simage, 0, 0, 0, 0, $image_size[0], $image_size[1]);
				imagefilledrectangle($nimage, 1, $image_size[1] - 15, 80, $image_size[1], $white);
				
				switch ($watertype){
					case 1 : // 加水印字符串
						imagestring($nimage, 2, 3, $image_size[1] - 15, $waterstring, $black);
						break;
					case 2 : // 加水印图片
						$simage1 = imagecreatefromgif("xplore.gif");
						imagecopy($nimage, $simage1, 0, 0, 0, 0, 85, 15);
						imagedestroy($simage1);
						break;
				}
				
				switch ($iinfo[2]){
					case 1 :
						// imagegif($nimage, $destination);
						imagejpeg($nimage, $destination);
						break;
					case 2 :
						imagejpeg($nimage, $destination);
						break;
					case 3 :
						imagepng($nimage, $destination);
						break;
					case 6 :
						imagewbmp($nimage, $destination);
						// imagejpeg($nimage, $destination);
						break;
				}
				
				// 覆盖原上传文件
				imagedestroy($nimage);
				imagedestroy($simage);
			}
			
			if ($imgpreview == 1){
				$img_online = $img_domain_path.$fname;
				echo "<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction($funcNum, '$img_online', '$message');</script>";
			}
		}
	}
}
?>
